#ifndef PATRON_H
#define PATRON_H
#include "compas.h"
#include "datos.h"

class Proyecto;

class d_Patron : public QSharedData
{
public:
    d_Patron() { }
    d_Patron(const d_Patron& otro) : QSharedData(otro), nombre(otro.nombre), listaCompases(otro.listaCompases) {}

    QString nombre;
    QList<Compas> listaCompases;
};

/**
 * Define la unidad de ensayo. Puede contener uno o mas compases definidos en el proyecto.
 */
class Patron : public Datos
{
public:
    Patron();
    Patron(const Patron& patron);
    Patron(const Compas& compas);
    ~Patron();

    static Patron solapar(const Patron& patron1, const Patron& patron2);

    bool esValido() const { return !d->nombre.isEmpty(); }

    QString getNombre() const {return d->nombre; }
    void setNombre(QString nombre) { d->nombre = nombre; }

    void setListaCompases(QList<Compas> listaCompases) { d->listaCompases = listaCompases; }
    QList<Compas> getListaCompases() { return d->listaCompases; }

    void agregarCompas(const Compas& compas) { d->listaCompases.append(compas); }

    int getNumeroCompases() const;
    Compas getCompas(int numeroCompas) const;

    int getNumeroPulsos() const;

    QVariant get(const QString& nombreAtributo) const;
    int getAncho(const QString& nombreAtributo) const;

    void serializar(QDomElement& elementoPatron) const;
    void deserializar(const QDomElement& elementoPatron, Proyecto* proyecto);
    
private:    
    QSharedDataPointer<d_Patron> d;
};

#endif // PATRON_H

